package com.cskaoyan.javase.object._6clone.immutable;

/**
 * 不可变对象
 *      指的是某个对象,一旦被创建
 *      除非销毁它
 *      否者对象的状态是不可能被改变的,这包括:
 *          类中的基本数据类型成员变量状态不可变
 *          类中的引用数据类型成员变量状态不可变:
 *              引用不能指向新的对象
 *              该引用指向的对象状态也不可变
 *
 * Java中的不可变对象,最典型的就是String,String对象不可变的原因在于:
 *      1.String当中的装字符串内容的value数组是final修饰的,这个value引用不能指向新对象
 *          并且value是私有的,且类中没有提供任何手段去修改value
 *          于是这个value数组就是用来存在字符串内容的,字符串的长度就是value数组的长度
 *          这个value数组是不可变的
 *      2.String这个类是final修饰的,表示该类无法被继承
 *          这样String也不可以用子类去修改它
 *
 *     总之,String对象是不可变的
 *     但是String对象的引用是可变的,可以指向一个新对象
 *
 *
 * @since 09:56
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        // "abc"对象一旦创建出来 就不可改变了 永远都是"abc"
        // 但是可以让引用s指向一个新对象
        String s = "abc";
        // 这里s引用一旦修改字符串内容,是指向了新对象,而不是修改原先的对象
        s = "12345";
        System.out.println("hello world!");
    }
}
